<!--
 * @Descripttion: 
 * @version: 
 * @Author: wtzhang
 * @Date: 2021-08-27 10:46:55
 * @LastEditors: wtzhang
 * @LastEditTime: 2021-09-01 14:17:16
-->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // ---------------------------- Array.from 转化为真正的数组 ---------------------------
    let obj = {
      '0': 'a',
      '1': 'b',
      '2': 'c',
      length: 3
    } // true
    let obj1 = {
      name: 'jack',
      age: 18
    } // false
    let obj2 = {
      name: 'rose',
      age: 18
    } // false
    let res = Array.from(obj)
    console.log(res);

    var arr = [1, 2, 3, 6, 4, 5]
    var fruits = ["Banana", "Orange", "Apple", "Mango"];

    // ------------------------------------------------------------- to.string() 将数组转为字符串 -----------------------------------------------
    [1, 2].toString() // "1, 2"

    // ------------------------------------------------------------- Array.join() 将数组元素分割为字符串，跟to.String()类似，但是可以设置分割符 -----------------
    let joinStr = arr.join('|')
    console.log(joinStr);
    console.log(fruits.join('*--*'));

    // ------------------------------------------------------------- pop() 方法从数组中删除最后一个元素 -------------
    let popArr = arr.pop()
    console.log(popArr); // 5
    /* 返回的是 被删除的元素 */

    //  ------------------------------------------------------------ push() 方法（在数组结尾处）向数组添加一个新的元素 --------------
    let pushArr = fruits.push('xigua')
    console.log(pushArr); // 5 push() 方法返回新数组的长度
    console.log(fruits);  // ["Banana", "Orange", "Apple", "Mango", "xigua"] 原数组元素已然增加


    // ------------------------------------------------------------- shift() 方法会删除首个数组元素，并把所有其他元素“位移”到更低的索引 ----------
    let shiftArr = fruits.shift()
    console.log(shiftArr); // Banana 返回被删除元素

    // ------------------------------------------------------------- unshift() 方法（在开头）向数组添加新元素，并“反向位移”旧元素 --------------
    let unshiftArr = fruits.unshift('香蕉')
    console.log(unshiftArr); // 5 返回新数组的长度
    console.log(fruits); // ["香蕉", "Orange", "Apple", "Mango", "xigua"]

    // ------------------------------------------------------------- length 属性提供了向数组追加新元素的简易方法
    fruits[fruits.length] = '柠檬'
    console.log(fruits);

    // ------------------------------------------------------------- delete --------------------------
    delete fruits[0]
    console.log(fruits); // [empty, "Orange", "Apple", "Mango", "xigua", "柠檬"]
    /*使用 delete 会在数组留下未定义的空洞。*/

    // ------------------------------------------------------------- splice() 方法可用于向数组添加新项 ---------------
    /*
      第一个参数（2）定义了应添加新元素的位置（拼接）。
      第二个参数（0）定义应删除多少元素。
      其余参数（“Lemon”，“Kiwi”）定义要添加的新元素。
    */
    let spliceArr = fruits.splice(0, 1, '榴莲')
    console.log(fruits);
    // old: [empty, "Orange", "Apple", "Mango", "xigua", "柠檬"]
    // new: ["榴莲", "Orange", "Apple", "Mango", "xigua", "柠檬"]
    fruits.splice(0, 0, '火龙果')
    console.log(fruits);

    // ------------------- 使用 splice() 来删除元素
    let spliceArr2 = fruits.splice(0, 1) // 删除了第一位置起的第一个元素，返回删被除元素的新数组
    console.log(spliceArr2); // ["火龙果"]

    // ----------------------------------------------------------- concat() 方法通过合并（连接）现有数组来创建一个新数组 ---------------------
    let a = ['jack', 'rose']
    let b = ['杰克', '露丝']
    let c = a.concat(b)
    console.log(c); // ["jack", "rose", "杰克", "露丝"]

    // ----------------------------------------------------------- slice() 方法用数组的某个片段切出新数组 -------------------
    /*
      可接受两个参数，比如 (1, 3)。
      该方法会从开始参数选取元素，直到结束参数（不包括）为止
    */
    let sliceArr = c.slice(0, 2)
    console.log(sliceArr); // 返回被切除元素组成的新数组 ["jack", "rose"]

    // ----------------------------------------------------------- sort() 方法以字母顺序对数组进行排序 -----------------------------------------
    let arrNum = [1, 3, 7, 2, 4, 6, 5]
    let sortArr = arrNum.sort()
    console.log(sortArr); // [1, 2, 3, 4, 5, 6, 7]

    // 倒序
    let sortArr2 = arrNum.sort((a, b) => {
      return b - a;
    })
    console.log(sortArr2); // [7, 6, 5, 4, 3, 2, 1]

    // 随机排序
    var points = [40, 100, 1, 5, 25, 10];
    points.sort(function(a, b){return 0.5 - Math.random()}); 
    console.log(points); 

    // ------------------------------------------------------------ reverse() 方法反转数组中的元素 ----------------------------------------------
    let reverseArr = sortArr2.reverse()
    console.log(reverseArr); // [1, 2, 3, 4, 5, 6, 7] 直接反转元素

    // ------------------------------------------------------------ Math.max() 找出数组元素最大值 -----------------------------------------------
    let maxNum = Math.max(...points)
    console.log(maxNum); // 100
    let minNum = Math.min.apply(null, [...points]) 
    console.log(minNum); // 1

    
    
  </script>
</body>

</html>